package com.qidian.zl.paper.service.impl;

import com.qidian.zl.paper.dao.AnswerDAO;
import com.qidian.zl.paper.dao.FieldDAO;
import com.qidian.zl.paper.factory.DAOFactory;
import com.qidian.zl.paper.pojo.Answer;
import com.qidian.zl.paper.pojo.Field;
import com.qidian.zl.paper.service.AnswerService;
import com.qidian.zl.paper.util.StResult;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class AnswerServiceImpl implements AnswerService {
    private AnswerDAO answerDAO= DAOFactory.getAnswerDAO();
    private FieldDAO fieldDAO=DAOFactory.getFieldDAO();
    @Override
    public int delete(String groupId) {

        return answerDAO.deleteByGroupId(groupId);
    }

    @Override
    public StResult queryAnswerByTime(long paperId,String startTime, String endTime, int page, int size) {

        //查询field 个数
        int filedCount=fieldDAO.queryByPaperId(paperId).size();
        //查询所有答案列表
        List<Answer> answers = answerDAO.queryAnswerByTime(paperId,startTime,endTime, page, size*filedCount);//*fieldCount 就是查几个size个答案
        //查询当前所有域的列表
        List<Field> fields = fieldDAO.queryByPaperId(paperId);
        //准备一个list 存放结果
        List<Map> list=new ArrayList<>();

        while (answers.size()>0){
            //
            Map tempMap=new HashMap();
            //获取第一个groudId
            String groudId=answers.get(0).getGroupId();
            //
            for (int i=0;i<answers.size();i++){
                //获取一个对象
                Answer a=answers.get(i);
                if(a.getGroupId().equals(groudId)){
                    //移除 对象
                    answers.remove(i);
                    i--;
                    // key value
                    String key="";
                    switch (getFiledType(a.getFieldId(),fields)){
                        case 2:
                            // 单行文本
                            key="text_"+a.getFieldId();
                            break;
                        case 3:
                            //多行文本
                            key="textarea_"+a.getFieldId();
                            break;
                        case 4:
                            // 单选按钮
                            key="radio_"+a.getFieldId();
                            break;
                        case 5:
                            // 多选按钮
                            key="checkbox_"+a.getFieldId();
                            break;
                    }
                    tempMap.put(key,a.getAnswerText());
                    tempMap.put("answerTime",a.getAnswerTime());
                    tempMap.put("groupId",a.getGroupId());
                    // 当一个map完成一个groupId的所有的数据之后，就退出循环
                    if(tempMap.size()-2==fields.size()){
                        break;
                    }
                }

            }

            list.add(tempMap);

        }

        System.out.println(list);
        StResult stResult=StResult.ok();
        stResult.setData(list);

        //查询总条数
        int total = answerDAO.queryTotal(paperId,startTime,endTime) / (filedCount == 0 ? 1 : filedCount);
        stResult.setObj(total);
        return stResult;

    }
    // 根据fieldId和fileds获取对应域的类型
    private int getFiledType(long filedId, List<Field> fields) {
        for (Field field : fields) {
            if (field.getFieldId().equals(new Long(filedId))) {
                return field.getFieldType();
            }
        }
        return 0;
    }
}
